package com.tyros.web.support.message;

import com.tyros.common.kit.support.BaseCode;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

/**
 * 基本消息
 * 格式：
 * 基本格式为6位字符，前两位为业务场景编码，后四位为业务逻辑编码
 *
 * @author zhangshuaiyin
 * @date 2022-1-15 21:23:17
 */
@Getter
@AllArgsConstructor
public enum BaseMessage implements BaseCode {
    /**
     * 成功 000000
     */
    SUCCESS("000000", "操作成功"),
    /**
     * 系统异常 999999
     */
    SYSTEM_ERROR("999999", "系统异常, 请联系管理员"),

    /**
     * 全局系统消息 10xxxx
     */
    INVALID_PARAM("100000", "请求参数异常, 请检查参数信息"),

    /**
     * 数据库消息 11xxxx
     */
    DATABASE_ERROR("110000", "数据库操作异常"),
    DATABASE_SELECT_ERROR("110001", "数据库查询异常"),
    DATABASE_INSERT_ERROR("110002", "数据库新增异常"),
    DATABASE_UPDATE_ERROR("110003", "数据库更新异常"),
    DATABASE_DELETE_ERROR("110004", "数据库删除异常"),
    ;

    /**
     * 错误代码
     */
    private final String code;
    /**
     * 错误信息
     */
    private final String message;

    /**
     * 错误码映射枚举对象
     *
     * @param code 消息代码
     * @return 枚举对象
     */
    public static BaseMessage of(String code) {
        return Arrays.stream(BaseMessage.values())
                .filter(c -> c.equals(code))
                .findFirst()
                .orElse(null);
    }

    /**
     * @param code 消息编码
     * @return 是否存在错误代码
     */
    public boolean equals(String code) {
        return this.getCode().equals(code);
    }
}
